/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package concoursbelote;

import java.util.ArrayList;

/**
 *
 * @author Shehu
 */
public class ClientJoueur extends Client
{
    ArrayList<Carte> mainJoueur = new ArrayList<Carte>(8);
    boolean prendMain = false ;
    String choixAtout =null;
    private int nombrePartiesJouees; 
    private int nombresPartiesGagnees;
    
    
    public ClientJoueur(String prenom, String surnom, double porteMonnaie, double coteDePopularite, String criSignificatif, String boissonFavorite,
			String boissonFavoriteSecours, double degreAlcoolemie, int degreConsommation, int jourBanissement)
                        {
                            super(prenom, surnom, porteMonnaie, coteDePopularite, criSignificatif, boissonFavorite, boissonFavoriteSecours, degreAlcoolemie, degreConsommation, jourBanissement);
                        }
    
    /**
     * J'ai envie de définir un joueur a partir d'un client déja créé
     * Un client , initialisé 
     */
    public ClientJoueur (String prenom, String surnom, double porteMonnaie, double coteDePopularite, String criSignificatif, String boissonFavorite,
			String boissonFavoriteSecours, double degreAlcoolemie, int degreConsommation, int jourBanissement, 
                        ArrayList<Carte> mainJoueur, int nombrePartiesJouees, int nombresPartiesGagnees)
    {
      this(prenom, surnom, porteMonnaie, coteDePopularite, criSignificatif, boissonFavorite, boissonFavoriteSecours, degreAlcoolemie, degreConsommation, jourBanissement);
      this.mainJoueur= mainJoueur;
      this.nombrePartiesJouees = nombrePartiesJouees;
      this.nombresPartiesGagnees = nombresPartiesGagnees;
    }
    
    /**
     * Intelligence artificielle = Le jouer à la gauche du donneur réfléchit en fonction des 5 cartes
     * qu'il a reçoit si celle retournée le conviendrait ou pas 
     * @param carteRetournee 
     * @author Shehu 
     */
  public boolean prendPremierTour (Carte carteRetournee) 
  {
      int totalPoints =0;
      int pointsCarteRetournee=0;
      
      for (int i=0 ; i<5 ; i++) // i s'arête à 5 car on est à l'étape ou le joueur à la gauche du donneur réfléchit pour prendre la carte retournée ou pas
      {
          SigneCarte couleur = carteRetournee.getCouleur();
          String couleurAtout = couleur.getNomCouleur();
          pointsCarteRetournee= ServeurArbitre.pointsCarte(mainJoueur.get(i),couleurAtout);
          totalPoints= totalPoints +pointsCarteRetournee;
      }
      if (totalPoints >=40)
          prendMain=true;
      else
          prendMain=false;
      
      return prendMain;
  }
  
  /**
   * Methode du joueur a gauche du donneur ; qui calcule les points en fonction de la couleur de l'atout 
   * et des cartes que le joueur a déja dans sa main , et choisi la meilleur couleurAtout qui rapporte
   * plus de points
   * @param carteRetournee 
   * @author Shehu
   */
  public boolean prendDeuxiemeTour (Carte carteRetournee)
  {
      int totalPoints;
      int pointsCarteRetournee=0;
      int pointProvisoire=0;
      String[] couleurAtout = {"Coeur","Carreau","Trefle","Pique"};
      
      for (int i=0 ; i<4 ; i++)
      {
          totalPoints=0;
          for (int j=0 ; j<5 ;j++)
          {
                pointsCarteRetournee = ServeurArbitre.pointsCarte(mainJoueur.get(j), couleurAtout[i]);
                totalPoints=totalPoints +pointsCarteRetournee;
          }
          totalPoints=totalPoints + ServeurArbitre.pointsCarte(carteRetournee, couleurAtout[i]);
          if (pointProvisoire <totalPoints)
          {
              pointProvisoire=totalPoints;
              choixAtout=couleurAtout[i];
          }
      }
      if (pointProvisoire>=40)
          prendMain=true;
      else
          prendMain=false;
      
      return prendMain;
    }
  
  /**
   * Methode permettant au joueur de trier ses cartes en respectant les couleurs et le signe
   * des cartes
   * @author Shehu
   */
  public void trieSonJeu()
  {
      boolean bool ;
      ArrayList <Carte> temp = new ArrayList< Carte> (8);
      String []couleurDeTri = {"Coeur", "Trefle" , "Carreau", "Pique"};
      
      for (int i =0 ; i<4 ; i++)
      {
          for (int j=0 ; j<8 ; j++)
          {
              bool = couleurDeTri[i].equals(mainJoueur.get(j).getCouleur());
              if ( bool == true )
              {
                  temp.add(mainJoueur.get(j));
              }
          }
      }
      mainJoueur.clear();
      mainJoueur.addAll(temp);
  }
  
  
  /**
   * retourne la 1ére carte qui sera jouée par le joueur .
   * @author Sh 
   */
  public Carte carteAJouer(String couleurJouee , String atout)
  {
      
      Carte carteAJouer ;
      int n ;  // n représente la carte n a jouer dans la main 
      n= ServeurArbitre.testCarteAJouer(mainJoueur, couleurJouee, atout);
      carteAJouer= mainJoueur.get(n).clone();
      mainJoueur.remove(n);
      return carteAJouer;
 }
  
  /**
   * Intelligence artificielle pour jouer une carte
   * @return 
   */
 /* public Carte carteJouee()
  {
      // Carte jouée par l'ia 
  }
  
  /**
   * Reçoit carte du paquet
   * @param carte 
   * @author Shehu
   */
  public void reçoitCarte(Carte carte)
  {
      mainJoueur.add(carte);
  }
  
  /**
   * Affiche le jeu de cartes du joueur a chaque début de parties
   */
  public void afficherJeuJoueur (int i)
  {
      
  }

    //@Override
    public void offirUneTournee(int indexClient) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     * Le client refusera un verre au cours d'une partie s'il perd 
     * @param index 
     */
    //@Override
    public void refuserUnVerre(int index) 
    {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    /**
     * Le client acceptera doffrir une tournée si son équipe gagne un tournoi
     * @param indexClient 
     */

    //@Override
    public void offrirUneTournee(int indexClient) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}
